package structure;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Parst die importierte LST-Datei und spaltet die Zeilen in Attribute auf.
 * @author Dorothee Kern und Patrick Lehmann
 *
 */
public class Parser {

    /**
     * Parst die einzelnen Listenelemente nach festen Breiten und unterteilt diese in
     * die Attribute memoryAdress, opCode, lineNumber und programCode.
     * Diese werden in einem {@link Line}-Objekt gespeichert und der Liste lines hinzugef�gt.
     * Es werden nur Zeilen beruecksichtigt, die Assemblercode enthalten.
     * @param importedSourceCode Importierte Quellcode, Rueckgabewert der Methode importLST aus {@link Importer}
     * @return Liste, die die aufgespaltenen Befehle als {@link Line}-Objekte enthaelt.
     */
    public List<Line> parseLST(List<String> importedSourceCode) {
        List<Line> lines = new ArrayList<Line>();
        String memoryAddress;
        String opCode;
        String lineNumber;
        String programCode;
        lines.clear();
        for (Iterator<String> iterator = importedSourceCode.iterator(); iterator.hasNext();) {
            String string = (String) iterator.next();

            if (!string.startsWith(" ")) {
                memoryAddress = string.substring(0, 4);
                opCode = string.substring(5, 9);
                lineNumber = string.substring(20, 25);
                programCode = string.substring(27);

                lines.add(new Line(memoryAddress, opCode, lineNumber, programCode));
            }
        }

        return lines;
    }
    /**
     * Selbe Funktion wie parseLST. Es werden aber alle Zeilen berücksichtigt, um die Attribute
     * getrennt auf der GUI ausgeben zu können.
     * @param importedSourceCode
     * @return
     */
    public List<Line> parseLSTforGUI(List<String> importedSourceCode) {
        List<Line> lines = new ArrayList<Line>();
        String lineNumber;
        String programCode;
        lines.clear();
        for (Iterator<String> iterator = importedSourceCode.iterator(); iterator.hasNext();) {
            String string = (String) iterator.next();

            lineNumber = string.substring(20, 25);
            programCode = string.substring(27);

            lines.add(new Line("0", "0", lineNumber, programCode));
        }
        return lines;
    }
}
